import re
import json
from loguru import logger
from tools.handle_global_variable import GlobalVariable
from tools.handle_phone_name import HandlePhoneName


# 把读取excel里面的数据，把占位符数据替换成对应的数据
def replace_req_case_data(case):
    logger.info(f"需要替换的数据为:{case},需要替换的数据类型为:{type(case)}")
    # case数据的类型为dict类型，因为从ddt解包出来的数据就是dict数据类型
    # 替换的时候，dict类型的数据需要转化成str类型的数据，才能进行替换操作
    case = json.dumps(case)
    logger.info(f"转化后,需要替换的数据为:{case},数据类型为:{type(case)}")
    # 使用正则表达式，从case中获取要替换的数据
    to_be_replaced_variable_list = re.findall('#(\w+)#', case)
    logger.info(f"要替换的数据列表为:{to_be_replaced_variable_list}")
    # 判断需要替换的数据是否存在，存在则进行
    if to_be_replaced_variable_list:
        # 实例化获取电话姓名的类，方便后续替换数据使用
        hpm = HandlePhoneName()
        # 遍历需要替换的数据
        for variable in to_be_replaced_variable_list:
            # 若需要替换的数据为new_phone，则进行替换操作
            if variable == "new_phone":
                new_phone = hpm.get_new_phone()
                logger.info(f"new_phone为:{new_phone}")
                case = case.replace(f'#{variable}#', new_phone)

            # 特殊项：主要目的是让获取验证码的手机号，在注册时，也是该手机号
            elif variable == "verification_code_phone":
                case = case.replace(f'#verification_code_phone#',
                                    str(getattr(GlobalVariable, "verification_code_phone")))

            elif variable == "exists_phone":
                exists_phone = hpm.get_exists_phone()
                logger.info(f"exists_phone为:{exists_phone}")
                case = case.replace(f'#{variable}#', exists_phone)

            elif variable == "user_name":
                new_user_name = hpm.get_new_user_name()
                logger.info(f"new_user_name为:{new_user_name}")
                case = case.replace(f'#{variable}#', new_user_name)

            elif variable == "code":
                case = case.replace(f'#code#', getattr(GlobalVariable, "verification_code"))
            # 后续可以补充其他要替换的数据
        # logger.info(f"替换后的数据为:{case},{type(case)}")
        logger.info(f"替换后的数据转化类型:{json.loads(case)},{type(json.loads(case))}")
        return json.loads(case)
    else:
        logger.info(f"获取占位符的列表为{to_be_replaced_variable_list}, 没有需要替换的数据")
        return json.loads(case)


if __name__ == '__main__':
    case = {'id': 1, 'title': '前置条件-获取验证码', 'method': 'get', 'req_url': 'verificationCode/message',
            'req_data': '{"phone": #new_phone#}', 'extract_data': '{"verification_code":"$.data"}',
            'expected_results': '{["expression":"$.code","expected":0,"compare_type":"=="],["expression":"$.msg","expected":"操作成功","compare_type":"=="]}',
            'assert_db': None}
    hr = replace_req_case_data(case)
    print(hr, type(hr))
